/** @类 观察者 */
export class Observer {
	constructor() {
		this.listeners = {};
	}

	/** @方法 获取事件 */
	getListeners(type) {
		!this.listeners[type] && (this.listeners[type] = []);
		return this.listeners[type];
	}

	/** @方法 添加监听 */
	addListener(type, listener) {
		this.getListeners(type).push(listener);
	}

	/** @方法 移除监听 */
	removeListener(type, listener) {
		const listeners = this.getListeners(type);
		const index = listeners.indexOf(listener);
		index > -1 && listeners.splice(index, 1);
	}

	/** @方法 触发监听 */
	dispatch(type, ...args) {
		this.getListeners(type).forEach((listener) => listener(...args));
	}

	/** @方法 销毁监听 */
	destroy() {
		this.listeners = {};
	}
}

export default Observer;